package com.sxj.corejava.code09_集合.Collections;

import java.util.*;

/**
 * @author 石小俊
 * 2024年07月25日 15:41
 * 控制台输入一个字符串,统计字符串中每个字符出现的次数,保存到HashMap集合中
 * 通过排序,打印输出次数最多的前三个字符及次数
 */
public class Test02_练习 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入一个字符串:");
        String s = sc.nextLine();
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            map.put(c, map.containsKey(c) ? map.get(c) + 1 : 1);
        }

        // 将Map集合转换成List集合
        // 1.将Map集合转换成Set集合
        Set<Map.Entry<Character, Integer>> set = map.entrySet();
        // 2.将Set集合转换成List集合
        List<Map.Entry<Character, Integer>> list = new ArrayList<>(set);

        Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
            @Override
            public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
                // 根据字符出现的次数进行降序排序
                if (o1.getValue() > o2.getValue()) {
                    return -1;
                } else if (o1.getValue() < o2.getValue()) {
                    return 1;
                }
                return 0;
            }
        });
        System.out.println(list);

        // 打印前三个
        for (int i = 0; i < 3; i++) {
            Map.Entry<Character, Integer> entry = list.get(i);
            System.out.println("字符" + entry.getKey() + "出现的次数为:" + entry.getValue());
        }
    }

}
